/*************************************************
  * 描述：将中文姓名转换为姓名信息结构体
  *
  * File：nameconverter.h
  * Author：gaomaolong@mozihealthcare.cn
  * Date：2025/9/18
  * Update：
  * ************************************************/
#ifndef NAMECONVERTER_H
#define NAMECONVERTER_H

#include <QString>
#include <common/export.h>

enum class Ethnicity : uint8_t
{
	// 采用 [姓氏 + 名字] 结构的民族（姓在前，名在后）
	HAN,      // 汉族
	MONGOL,   // 蒙古族
	HUI,      // 回族
	MIAO,     // 苗族
	YI,       // 彝族
	ZHUANG,   // 壮族
	BUYEI,    // 布依族
	KOREAN,   // 朝鲜族
	MAN,      // 满族
	DONG,     // 侗族
	YAO,      // 瑶族
	BAI,      // 白族
	TUJIA,    // 土家族
	HANI,     // 哈尼族
	DAI,      // 傣族
	LI,       // 黎族
	LISU,     // 傈僳族
	VA,       // 佤族
	SHE,      // 畲族
	GAOSHAN,  // 高山族
	LAHU,     // 拉祜族
	SUI,      // 水族
	DONGXIANG,// 东乡族
	NAXI,     // 纳西族
	JINGPO,   // 景颇族
	TU,       // 土族
	DAUR,     // 达斡尔族
	MULAO,    // 仫佬族
	QIANG,    // 羌族
	BLANG,    // 布朗族
	SALAR,    // 撒拉族
	MAONAN,   // 毛南族
	GELAO,    // 仡佬族
	XIBE,     // 锡伯族
	ACHANG,   // 阿昌族
	PUMI,     // 普米族
	NU,       // 怒族
	EVENKI,   // 鄂温克族
	DEANG,    // 德昂族
	BONAN,    // 保安族
	YUGUR,    // 裕固族
	GIN,      // 京族
	JINO,     // 基诺族
	OROQEN,   // 鄂伦春族
	HEZHEN,   // 赫哲族

	// 采用 [本名 + 父名] 结构的民族（"名"前"姓"后）
	UYGHUR,// 维吾尔族
	KAZAK, // 哈萨克族
	KIRGIZ,// 柯尔克孜族
	TAJIK, // 塔吉克族
	UZBEK, // 乌孜别克族
	TATAR, // 塔塔尔族

	// 传统上 [只有名] 的民族（无姓氏）
	TIBETAN,// 藏族
	MONBA,  // 门巴族
	LHOBA,  // 珞巴族

	// 其他特殊规则民族
	RUSSIAN,// 俄罗斯族 (名+父名+姓，姓在后)
	DERUNG  // 独龙族 (家族名+本名)
};

struct NameInfo
{
	QString surName;         //姓
	QString personalName;    //名
	QString surnameSpl;      //姓拼音
	QString surNameFspl;     //姓拼音首字母
	QString personalNameSpl; //名拼音
	QString personalNameFspl;//名拼音首字母
};

class CXI_COMMON_EXPORT NameConverter
{
public:
	/**
	 * 将中文姓名转换为姓名信息结构体
	 * @param name 中文姓名字符串
	 * @param ethnicity 民族枚举，默认为汉族
	 * @return 包含姓名各部分信息的 NameInfo 结构体
	 * @warning 如果拼音转换失败，相关字段可能为空；如果要转换的姓名不合法，会返回空结构体
	 */
	static NameInfo cvt2NameInfo(const QString& name, Ethnicity ethnicity = Ethnicity::HAN);
};

#endif//NAMECONVERTER_H
